package org.example.backend.service;

import org.example.backend.model.Result;
import org.example.backend.model.WeatherAlert;
import org.example.backend.model.WeatherCurrent;
import org.example.backend.model.WeatherForecast;
import reactor.core.publisher.Mono;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 天气服务接口
 */
public interface WeatherService {
    /**
     * 获取城市当前天气
     */
    Mono<Result<WeatherCurrent>> getCurrentWeather(String cityCode);

    /**
     * 获取所有城市当前天气
     */
    Mono<Result<List<WeatherCurrent>>> getAllCurrentWeather();

    /**
     * 获取城市天气预报
     */
    Mono<Result<List<WeatherForecast>>> getWeatherForecast(String cityCode);

    /**
     * 获取城市天气警报
     */
    Mono<Result<List<WeatherAlert>>> getWeatherAlert(String cityCode);

    /**
     * 获取城市所有天气信息
     */
    Mono<Result<Map<String, Object>>> getAllWeatherInfo(String cityCode);

    /**
     * 获取所有城市代码和名称
     */
    Mono<Result<List<Map<String, Object>>>> getAllCities();

    /**
     * 根据城市名称搜索
     */
    Mono<Result<List<WeatherCurrent>>> searchByName(String name);

    /**
     * 获取天气统计信息
     */
    Mono<Result<Map<String, Object>>> getStatistics();

    /**
     * 获取热门城市天气
     */
    Mono<Result<List<WeatherCurrent>>> getHotCities();

    /**
     * 获取最冷城市天气
     */
    Mono<Result<List<WeatherCurrent>>> getColdCities();

    /**
     * 获取特定温度范围内的城市
     */
    Mono<Result<List<WeatherCurrent>>> getCitiesByTemperatureRange(BigDecimal minTemp, BigDecimal maxTemp);

    /**
     * 获取指定日期的天气预报
     */
    Mono<Result<WeatherForecast>> getForecastByDate(String cityCode, String date);

    /**
     * 获取特定天气状况的城市
     */
    Mono<Result<List<WeatherCurrent>>> getCitiesByWeatherCondition(String condition);

    /**
     * 比较多个城市的天气
     */
    Mono<Result<Map<String, List<WeatherCurrent>>>> compareCities(List<String> cityCodes);
} 